<?xml version = '1.0' encoding = 'UTF-8'?>
<HBRRepo><variables><variable name="OQP_Scenario" type="member" usage="const" id="3" product="Planning"><property name="application">SalesPln</property><property name="dimensionInputMode">type</property><property name="dimensionType">Scenario</property><property name="prompt_text">LABEL_QTP_SLS_PLAN_PRMPT_SCENARIO</property><property name="scope">ruleset</property><property name="seeded">true</property><value/></variable><variable name="OQP_Territory" type="member" usage="const" id="1" product="Planning"><property name="application">SalesPln</property><property name="dimensionInputMode">type</property><property name="dimensionType">Territory</property><property name="prompt_text">LABEL_QTP_SLS_PLAN_PRMPT_TERRITORY</property><property name="scope">ruleset</property><property name="seeded">true</property><value/></variable><variable name="OQP_Version" type="member" usage="const" id="2" product="Planning"><property name="application">SalesPln</property><property name="dimensionInputMode">type</property><property name="dimensionType">Version</property><property name="prompt_text">LABEL_QTP_SLS_PLAN_PRMPT_VERSION</property><property name="scope">ruleset</property><property name="seeded">true</property><value/></variable></variables><rulesets/><rules><rule id="1" name="OQP_Waterfall Seasonality" product="Planning"><property name="application">SalesPln</property><property name="plantype">OEP_QTP</property><property name="seeded">true</property><variable_references><variable_reference name="OQP_Scenario" id="3"><property name="application">SalesPln</property><property name="hidden">true</property><property name="rule_name">OQP_Waterfall Seasonality</property><property name="seq">1</property><property name="type">3</property><property name="useAsOverrideValue">false</property><property name="validation_value">OEP_Plan</property></variable_reference><variable_reference name="OQP_Territory" id="1"><property name="application">SalesPln</property><property name="hidden">true</property><property name="rule_name">OQP_Waterfall Seasonality</property><property name="seq">2</property><property name="type">3</property><property name="useAsOverrideValue">false</property><property name="validation_value">"OEP_Any Territory"</property></variable_reference><variable_reference name="OQP_Version" id="2"><property name="application">SalesPln</property><property name="hidden">true</property><property name="rule_name">OQP_Waterfall Seasonality</property><property name="seq">3</property><property name="type">3</property><property name="useAsOverrideValue">false</property><property name="validation_value">OEP_Working</property></variable_reference></variable_references><script type="groovy">			/*RTPS:{OQP_Territory} {OQP_Version} {OQP_Scenario}}*/
            /*PURPOSE: This rule applies seasonality percentage distribution to given territory and its children*/
			String entity = rtps.OQP_Territory.member.name;
			String Scenario=rtps.OQP_Scenario.member.name;
			String Version=rtps.OQP_Version.member.name;			
			String strCrossDim = "";
			def grid=operation.grid;
			List&lt;String> CustomDimensions=[];
			List&lt;String> CustomRelDimensions=[];
			List&lt;String> povDimensions=[];
			int iCnt;
			try{
				StringBuilder cscript = new StringBuilder();
                /*Identify POV Dimensoins and their members*/
				Application app=operation.getApplication();
				List&lt;DataGrid.HeaderCell> povs = grid.getPov()
				for (DataGrid.HeaderCell pov : povs) 
				{
					String mbrName=pov.getMbrName()
					String dimName=pov.getDimName()
					if (!mbrName.equals(Scenario) &amp;&amp; !mbrName.equals(Version) &amp;&amp; !pov.getDimensionType().equals(DimensionType.SIMPLE_CURRENCY) &amp;&amp; !mbrName.equals(entity) )
					{
						if (!dimName.equals("Years"))
						{
							strCrossDim= strCrossDim + "\""+ mbrName+"\"->"
							CustomDimensions.add('''"'''+dimName+'''"''')
							CustomRelDimensions.add('''@Relative("'''+dimName+'''",0)''')
						}
					
					}
				
				}
				cscript.append('''SET AGGMISSG ON;\n''');
				cscript.append('''SET UPDATECALC OFF;\n''');
				cscript.append('''FIX(@Relative("YearTotal",0),&amp;OEP_CurYr,''')
				cscript.append ('''"'''+Version+'''",''')
				if (app.getCurrencyMode()!=CurrencyMode.SINGLE_CURRENCY)
				{
				String sCurrency =  operation.grid.pov.find { it.dimName == 'Currency' }.essbaseMbrName 
                cscript.append ('''"'''+ sCurrency +'''",''')
				}
				cscript.append ('''@ICHILDREN("'''+entity+'''"))\n''')
                
                 /*Push Seasonality Percentages to its Descendents*/
                cscript.append ('''	FIX("BegBalance"''')
                if (CustomRelDimensions.size()>0)
                {
                 	cscript.append (''','''+CustomRelDimensions.join(''','''))
                }
               	cscript.append(''')\n''');               
                cscript.append('''		FIX("'''+Scenario+'''")\n''')            
				cscript.append('''			"OQP_Seasonality%"( \n''')                        
				cscript.append('''				"OQP_Seasonality%"="OQP_Seasonality%"->"'''+entity+'''";\n''')
				cscript.append('''			)\n''')
				cscript.append('''		ENDFIX\n''')                
                cscript.append('''	ENDFIX\n''');
                
				
                /*Applies Seasonality Percentage on Adjusted Target Quota*/
				if (CustomRelDimensions.size()>0)
				{
					cscript.append('''	FIX(@Relative("OQP_Adjusted Target Quota",0),'''+CustomRelDimensions.join(''',''')+''')\n''')
				}
				else
				{
					cscript.append('''	FIX(@Relative("OQP_Adjusted Target Quota",0))\n''')
				}	
				cscript.append('''		"'''+Scenario+'''"(\n''')
                cscript.append('''			@CALCMODE(BOTTOMUP);\n''');
				cscript.append('''			"'''+Scenario+'''"="'''+Scenario+'''"->YearTotal*('''+strCrossDim+'''"'''+Scenario+'''"->"'''+entity +'''"->"OQP_Seasonality%"/'''+strCrossDim+'''"'''+Scenario+'''"->"'''+entity +'''"->"OQP_Seasonality%"->Yeartotal);\n''')
				cscript.append ('''		)\n''')
				cscript.append('''	ENDFIX;\n''')
                /*Aggregates custom dimensions*/
				if (CustomRelDimensions.size()>0)
				{
					cscript.append('''	FIX(@Relative("OQP_Adjusted Target Quota",0),''')
					cscript.append('''"'''+Scenario+'''")\n''')
					for (iCnt=0;iCnt&lt;CustomDimensions.size()-1;iCnt++)
						{
						cscript.append('''			FIX(@RELATIVE('''+CustomDimensions[iCnt]+''',0))\n''')              
						}                
						for (iCnt=CustomDimensions.size()-1;iCnt>0;iCnt--)
						{
						cscript.append('''				AGG('''+CustomDimensions[iCnt]+''');\n''')                        
						cscript.append('''			ENDFIX\n''')
						}
						cscript.append('''			AGG('''+CustomDimensions[0]+''');\n''')			
					cscript.append('''	ENDFIX;\n''')
				}
				cscript.append('''ENDFIX;\n''')
				println(cscript.toString())
				return cscript.toString();
			}catch(all) {
				throw new HspRuntimeException('Error occured while executing business rule');
			}			
		</script></rule></rules><components/><deployobjects><deployobject product="2" application="salespln" plantype="oep_qtp" obj_id="1" obj_type="1" name="OQP_WATERFALL SEASONALITY"/></deployobjects></HBRRepo>